from typing import List, Dict, Any
import json
import datetime

from myAgent.AgentStrategy import use_agent, get_tool_Result
from mcpTool.useMCPAgent import use_MCP_tools_async


async def use_agent_tools(message, tools: List[List[str]], session_id: str = "default"):
    """
    根据工具ID使用不同的工具

    Args:
        message: 用户输入的消息
        tools: 工具ID列表，包含[tool_ids, workflow_ids, mcp_tool_ids]
        session_id: 会话ID

    Returns:
        Dict[str, Any]: 处理结果字典，包含：
            - response: 回复内容
            - is_complete: 是否是完整问题的回复
            - missing_fields: 缺失的字段列表(当is_complete为False时)
    """
    # 解构工具列表
    tool_ids, workflow_ids, mcp_tool_ids = tools

    # 根据不同类型的工具ID进行处理
    if tool_ids:
        # 处理普通工具
        print(f"使用工具 {tool_ids} 处理消息: {message}")
        result = use_agent(message, tool_ids, session_id)

        # 检查返回值类型，如果是字符串，说明发生了错误
        if isinstance(result, str):
            yield json.dumps({
                "type": "message",
                "content": result,
                "timestamp": datetime.datetime.now().isoformat()
            })
            return

        # 初始化结果
        all_responses = []
        all_missing_fields = []

        # 处理每个工具的结果
        for result_params, tool in result:
            # 检查问题是否完整
            if not result_params.get("isComplete", True):
                # 如果有任何一个工具需要补充信息，则标记为不完整
                is_complete = False
                all_missing_fields.extend(result_params.get("missing_fields", []))
                # 返回第一个不完整的提示
                yield json.dumps({
                    "type": "message",
                    "content": result_params.get("content", "需要补充信息"),
                    "timestamp": datetime.datetime.now().isoformat()
                })
                return

            # 问题完整，调用工具处理函数
            tool_result = get_tool_Result(message, result_params, tool)
            all_responses.append(tool_result)

        # 所有工具处理完成，返回组合的结果
        if all_responses:
            combined_response = "\n\n".join(all_responses)
            yield json.dumps({
                "type": "message",
                "content": combined_response,
                "timestamp": datetime.datetime.now().isoformat()
            })
            return
        else:
            yield json.dumps({
                "type": "message",
                "content": "工具处理完成",
                "timestamp": datetime.datetime.now().isoformat()
            })
            return
    elif mcp_tool_ids:
        # 处理MCP工具
        try:
            print(f"使用MCP工具 {mcp_tool_ids} 处理消息: {message}")
            # 使用异步生成器处理流式输出
            async for chunk in use_MCP_tools_async(message, mcp_tool_ids, session_id):
                yield chunk
            return
        except Exception as e:
            error_message = f"MCP工具执行失败: {str(e)}"
            print(error_message)
            yield json.dumps({
                "type": "message",
                "content": error_message,
                "timestamp": datetime.datetime.now().isoformat()
            })
    elif workflow_ids:
        # 处理工作流
        # 这里可以添加实际的工作流处理逻辑
        yield json.dumps({
            "type": "message",
            "content": f"执行工作流 {workflow_ids} 处理消息: {message}",
            "timestamp": datetime.datetime.now().isoformat()
        })
        return

    yield json.dumps({
        "type": "message",
        "content": "未找到匹配的工具",
        "timestamp": datetime.datetime.now().isoformat()
    })
    return